﻿
var dataModel = {
    model: {}
};

/**
 * 弹出购物车层
 * @param el
 */
function showSpec(el) {
    var html = '';
    var product_info = JSON.parse($(el).attr('product_info'));
    var pro_img = product_info.icon_url;
    var pro_name = product_info.name;
    var pro_price = '--';
    var standard_html = [];
    standard_html.push('<div class="sort-input normal_tag">');
    var standard_list = product_info.standard_list;
    for(var key in standard_list){
        standard_html.push('<div class="');
        if(standard_list[key].is_enable == 0){
            standard_html.push('disable');
        }else{
            standard_html.push('overlay');
        }
        if(standard_list[key].is_check == 1){
            standard_html.push('tag_on');
        }
        standard_html.push('">');
        standard_html.push('<input type="checkbox" name="standard_list['+standard_list[key].id+'][]"');
        standard_html.push('value="'+standard_list[key].id+'"');
        standard_html.push('standard_name = "'+standard_list[key].name+'"');
        standard_html.push('unit_name = "'+standard_list[key].unit_name+'"');
        standard_html.push('num = "'+standard_list[key].num+'"');
        standard_html.push(' style="display: none;">');
        standard_html.push(standard_list[key].name);
        standard_html.push(' </div>');

    }
    standard_html.push('</div>');
    var standard_html_temp =  standard_html.join(" ");
    $("#pro_img").attr('src', pro_img);
    $("#pro_name").html(pro_name);
    $("#pro_price").html(pro_price);
    $("#standard_list").html(standard_html_temp);
    $("#pro_num").attr('product_id', product_info.id); // 设置商品id
    var attribute_list = product_info.attribute_list;
    if (attribute_list != '' && attribute_list != undefined) {
        loadSkuDetail(product_info.attribute_list);
    } else {
        Tip('获取属性失败');
        return false;
    }

    $("#fade").fadeIn("slow");
    $("#guige").slideDown();
}
function pro_detail() {
    var pro_id = $("#pro_num").attr('product_id');
    pro_id = trim(pro_id);
    window.location.href ='/product/detail/id/'+pro_id+'.html';
}
/*去除前后空格*/
function trim(s){
    return s.replace(/(^\s*)|(\s*$)/g, "");
}
//弹出层
function Show_div(img_id) {
    $("#fade").fadeIn("slow");
    $("#guige").slideDown();
    $('.img_val_disn').empty();
    var html = '<input class="img_val" value="'+img_id+'" >';
    $('.img_val_disn').append(html);
}
function num_down(el) {
    var num = parseInt($(el).siblings().find('input[name="num"]').val());
    if (num > 1) {
        num = num - 1;
    } else {
        if($("#position").val() == 'cart-index'){
            num = 1;
        }else{
            var index = layer.msg('购买数量必须大于0', {icon: 15, shade: 0.1, time: 1800});
            num = 1;
        }
    }
    $(el).siblings().find('input[name="num"]').val(num);
    if($("#position").val() == 'cart-index'){
        var key = $(el).siblings().find('input[name="num"]').attr('rel') + '_' + $(el).siblings().find('input[name="num"]').attr('data-id');
        $('#pro_id_' + key).siblings('.bianji-number').find('span').html(num);
        cartTotal();
    }
}
function num_up(el) {
    var num = parseInt($(el).siblings().find('input[name="num"]').val());
    if (num > 0) {
        num = num + 1;
    } else {
        num = 1;
    }
    $(el).siblings().find('input[name="num"]').val(num);
    if($("#position").val() == 'cart-index'){
        var key = $(el).siblings().find('input[name="num"]').attr('rel') + '_' + $(el).siblings().find('input[name="num"]').attr('data-id');
        $('#pro_id_' + key).siblings('.bianji-number').find('span').html(num);
        cartTotal();
    }
}
/**
 * 点击购物车上规格事件
 */
$(document).on('click', '#standard_list .normal_tag div', function () {
    if($(this).hasClass('disable')){
        return true;
    }
    $("#standard_list .normal_tag div").removeClass('tag_on');
    $("#standard_list .normal_tag div").find('input').prop('checked', false);
    if (!$(this).hasClass('tag_on')) {
        $(this).addClass('tag_on');
        $(this).find('input').prop('checked', true);
        var unit_name = $(this).find('input').attr('unit_name');
        var basic_price = $("#pro_num").attr('basic_price');
        if (!isNaN(basic_price) && basic_price != '') {
            $("#pro_price").html(basic_price * 100 * $(this).find('input').attr('num') * 100 / 10000 + '/' + unit_name);
        }
    }
});

/**
 * 添加购物车
 * @returns {boolean}
 */
function addCart() {
    var num = $("#pro_num").val();
    var key = $("#pro_num").attr('rel');
    if (key && num) {
        if($("#action").val() == 'fast-buy'){ // 如果是立即购买
            sendOrder();
            return true;
        }
        if($("#position").val() == 'cart-index'){ // 如果是购物车页面修改页面数据
            changeCart();
            return true;
        }
        $.ajax({
            url: '/ajax/product/',
            type: 'post',
            dataType: 'json',
            data: {'ajaxdata': 'addCart', 'id': key, 'num': num},
            success: function (response) {
                Tip(response.message);
                $("#dibuzixun .cart-number").show().html(response.result);
                CloseDiv();
            },
            beforeSend: function () {
            }
        });
    } else {
        Tip('请选择商品参数');
        return false;
    }
}

/**
 * 修改购物车
 */
function changeCart() {
    var key = $("#old_item").val();
    var standard_num = $('#standard_list .normal_tag .tag_on').find('input').attr('num'); // 获取规格进率
    var price = $("#pro_num").attr('basic_price') * 100 * standard_num * 100 / 10000;
    var num = $('#pro_num').val();
    var spec_txt = $("#pro_num").attr('attr');
    var spec_id = $("#pro_num").attr('rel'); // 字符串拼出来的信息
    var spec = spec_id.split('_');

    $('#pro_id_' + key + ' .bianji-guige').attr('rel', spec[0]);
    $('#pro_id_' + key + ' .bianji-guige').attr('data-id', spec[1]);
    $('#pro_id_' + key + ' .bianji-guige').attr('product-standard-id', spec[2]);
    $('#pro_id_' + key + ' .bianji-guige .pro_spec_txt').html(spec_txt);

    $('#pro_id_' + key + ' .proNum input').attr('rel', spec[0]);
    $('#pro_id_' + key + ' .proNum input').attr('data-id', spec[1]);
    $('#pro_id_' + key + ' .proNum input').attr('product-standard-id', spec[2]);
    $('#pro_id_' + key + ' .proNum input').attr('price', price);
    $('#pro_id_' + key + ' .proNum input').val(num);

    $('#pro_id_' + key + ' .bianji-price span').html(price);
    $('#pro_id_' + key).siblings('.bianji-number').find('span').html(num);
    $('#pro_id_' + key + ' .bianji-guige').find('.spec_list').html($("#spec_list").html());

    $('input[data-key="' + key + '"]').val(spec_id);
    cartTotal();
    CloseDiv();
}
/**
 * 计算购物车总价
 */
function cartTotal() {
    var amount = 0;
    $('.gouxuan').each(function (index, ele) {
        if ($(ele).find('input[name="cart_key[]"]').prop('checked')) {
            var spec_key = $(ele).find('input[name="cart_key[]"]').val();
            var spec = spec_key.split('_');
            var price = 0;
            var num = 0;

            $('.bianji-jiajian .proNum input[name="num"]').each(function (position, dom) {
                if ($(dom).attr('rel') == spec[0] && $(dom).attr('data-id') == spec[1]) {
                    price = $(dom).attr('price');
                    num = $(dom).val();
                }
            })
            amount += parseFloat(price) * parseInt(num);
        }
    });
    $("#total").html(amount.toFixed(2));
}
/**
 * 去结算
 * @param el
 * @returns {boolean}
 */
function sendOrder(el) {
    var key = $("#pro_num").attr('rel');
    var num = $("#pro_num").val();
    if (key && num) {
        $.ajax({
            url: '/ajax/cart/',
            type: 'post',
            dataType: 'json',
            data: {'ajaxdata': 'buyNow', 'id': key, 'num': num}, // 这个字段不是真正意义上的id  是下划线拼出来的
            success: function (response) {
                layer.closeAll();
                if (response.code == 200) {
                    var form = $("<form style='display:none;' method='post' action='/order/index'></form>");
                    $.each(response.result, function (key, value) {
                        var input = $("<input type='hidden'>");
                        input.attr({"name": key});
                        input.val(value);
                        form.append(input);
                    });
                    form.appendTo(document.body);
                    form.submit();
                } else {
                    if(response.result == 'login'){
                        setTimeout('window.location.href="/home/login/"',500);
                    }
                    Tip(response.message);
                    return false;
                }
            },
            beforeSend: function () {
                layer.load(1);
            }
        });
    } else {
        Tip('请选择商品参数');
        return false;
    }
}
// 处理规格
var vm = new Vue({
    el: '#spec_list',
    data: dataModel,
    methods: {
        toggle: function (group, item) { // 购物车属性点击事件
            for (var i = 0; i < group.values.length; i++)
            {
                var spec = group.values[i];
                if (spec.name == item.name){
                    spec.checked = !spec.checked;
                }
                else
                    spec.checked = false;
            }
            // 添加其他属性

            refreshViewStatus();
            // 获取选中属性
            var otherChecked = getCheckedSpecs(); // 获取所有选中属性
            // 根据其他规格类型的选中情况筛选出符合条件的 sku
            var matchOtherSku = filterSku(otherChecked);
            var specLength = dataModel.model.specs.length; // 所有属性数量
            var useCheckLength = otherChecked.length; // 用户选择数量
            if (specLength == useCheckLength && matchOtherSku.length == 1) { // 如果选中的为一个设置
                var standard_num = $('#standard_list .normal_tag .tag_on').find('input').attr('num'); // 获取规格进率
                var unit_name = $('#standard_list .normal_tag .tag_on').find('input').attr('unit_name'); // 获取单位单独名称
                var product_standard_id = $('#standard_list .normal_tag .tag_on').find('input').val();
                $('#pro_price').html(matchOtherSku[0].basic_price * 100 * standard_num * 100 / 10000 + '/' + unit_name); // 设置商品单价
                $("#pro_num").attr('rel', matchOtherSku[0].product_id + '_' + matchOtherSku[0].sku_id + '_' + product_standard_id); // 设置购物车隐藏域
                $("#pro_num").attr('attr',matchOtherSku[0].attr); // 设置购物车隐藏域
                $("#pro_num").attr('basic_price', matchOtherSku[0].basic_price); // 设置购物车隐藏域
                if($("#position").val() == 'product-detail'){ // 如果是购物车详情页面
                    $("#guige_txt").html(matchOtherSku[0].attr);
                }
            } else {
                $('#pro_price').html('--');
            }
        }
    }
});
// ----------------------------------------------

var allSpecs = []; // 商品全部属性列表
var skuSpecs = []; // 商品全部属性列表

function loadSkuDetail(sku) {
    allSpecs = sku.attributes; // 商品全部属性列表
    skuSpecs = sku.sku_path;  //  商品全部属性列表
    dataModel.model = {
        specs: renderViewSpecs() // 组装商品全部属性列表
    };
    refreshViewStatus();
}

function renderViewSpecs() {
    var temp = [];
    for (var i = 0; i < allSpecs.length; i++) {
        var spec = allSpecs[i];
        var m = {
            name: spec.attr_name,
            values: []
        };
        for (var j = 0; j < spec.attributes_item.length; j++) {
            m.values.push({
                name: spec.attributes_item[j],
                checked: false,
                disabled: false
            });
        }
        temp.push(m);
    }
    return temp;
}

function refreshViewStatus() {
    var specLength = dataModel.model.specs.length;
    var checked_num = specLength * (specLength - 1);
    var checked_num_temp = 0;
    // 遍历规格类型
    for (var i = 0; i < specLength; i++)
    {
        // 规格类型
        var specGroup = dataModel.model.specs[i];
        // 除了该规格类型的其他选中的规格
        var otherChecked = getCheckedSpecs(specGroup.name);
        // 根据其他规格类型的选中情况筛选出符合条件的 sku
        var matchOtherSku = filterSku(otherChecked);
        // 遍历该规格类型下面的所有值，确定是否可以选中
        for (var j = 0; j < specGroup.values.length; j++) {
            var spec = specGroup.values[j];

            spec.disabled = !isAnySkuMatchSpec(matchOtherSku, {
                name: specGroup.name,
                value: spec.name
            });
        }
    }
}

/**
 *  除了该规格类型的其他选中的规格
 * @param name 规格名称 例：尺寸、试用、型号
 * @param exclude_same 是否排除自己
 * @returns {Array}
 */
function getCheckedSpecs(name) {
    var temp = [];
    for (var i = 0; i < dataModel.model.specs.length; i++)
    {
        var specGroup = dataModel.model.specs[i];

        // 排除同一个
        if (name == specGroup.name)
            continue;

        // 选中的
        for (var j = 0; j < specGroup.values.length; j++) {
            var spec = specGroup.values[j];
            if (spec.checked)
            {
                temp.push({
                    name: specGroup.name,
                    value: spec.name
                });

                break;
            }
        }
    }

    return temp;
}

// 根据其他规格类型的选中情况筛选出符合条件的 sku
function filterSku(checkedSpecs) {
    var temp = [];

    // 遍历 Sku
    for (var i = 0; i < skuSpecs.length; i++) {
        var sku = skuSpecs[i];

        // 遍历选中的规格，找到匹配所有选中规格的 Sku
        var isMatched = true;
        for (var j = 0; j < checkedSpecs.length; j++) {
            var spec = checkedSpecs[j];

            if (!isSkuMatchSpec(sku, spec)) {
                isMatched = false;
                break;
            }
        }

        if (isMatched)
            temp.push(sku);
    }

    return temp;
}

function isSkuMatchSpec(sku, spec) {
    for (var i = 0; i < sku.sku_attr_info.length; i++) {
        var skuSpec = sku.sku_attr_info[i];
        if (skuSpec.attr_name == spec.name && skuSpec.attr_value == spec.value)
            return true;
    }

    return false;
}

function isAnySkuMatchSpec(skus, spec) {
    for (var i = 0; i < skus.length; i++) {
        if (isSkuMatchSpec(skus[i], spec))
            return true;
    }

    return false;
}
